package com.mmg.spzx.manager.utils;

import com.mmg.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class MenuHelper {

    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        List<SysMenu> treeList = new ArrayList<>();
        //遍历所有菜单
        /*sysMenuList.forEach(item -> {
            //如果当前菜单的父菜单id为0，说明是一级菜单
            if (item.getParentId() == 0) {
                //根据第一层，找下层数据，使用递归完成
                //sysMenu表示第一层菜单，sysMenuList表示所有菜单
                treeList.add(findChildren(item, sysMenuList));
            }
        });*/
        treeList = sysMenuList.stream()
                .filter(item -> item.getParentId() == 0)
                .map(item -> findChildren(item, sysMenuList))
                .collect(Collectors.toList());
        return treeList;
    }

    private static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        sysMenu.setChildren(new ArrayList<>());
        //遍历所有菜单
        /*sysMenuList.forEach(item -> {
            //如果当前菜单的父菜单id等于上一层菜单的id，说明是下一层菜单
            if (item.getParentId().equals(sysMenu.getId())) {
                //将下一层菜单添加到上一层菜单的children属性中
                sysMenu.getChildren().add(findChildren(item, sysMenuList));
            }
        });*/
        sysMenuList.stream()
                .filter(item -> item.getParentId().equals(sysMenu.getId()))
                .map(item -> findChildren(item, sysMenuList))
                .forEach(sysMenu.getChildren()::add);
        return sysMenu;
    }
}
